package semiSupervise;

import java.util.ArrayList;
import jwnl.JWNLDistances;

public class Ensemble {

    ArrayList<Element> Ens; // ensemble d'éléments

    Ensemble() {
        Ens = new ArrayList<Element>();
    }

    Ensemble(Element e) // créer un ensemble é partir d'un élément et détermination de centre
    {
        Ens = new ArrayList<Element>();
        this.Ens.add(e);
    }

    void add(Element e) // créer un ensemble é partir d'un élément et détermination de centre
    {
        this.Ens.add(e);
    }

    public int size() {
        return Ens.size();
    }

    public Element get(int i) {
        return Ens.get(i);
    }

    void remove(int i) {
        Ens.remove(i);
    }

    double distance_intra_groupe(int j, JWNLDistances d) {
        double dSim = 0.0;
        for (int i = 0; i < Ens.size(); i++) {
            if (i != j) {
                dSim += Ens.get(j).distance(Ens.get(i), d);
            }
        }
        return dSim / (Ens.size() - 1);
    }

    double distance_plus_loin(int j, JWNLDistances d) {
        double dSim, dMin = 100;
        for (int i = 0; i < Ens.size(); i++) {
            if (i != j) {
                dSim = Ens.get(j).distance(Ens.get(i), d);
                if (dSim < dMin) {
                    dMin = dSim;
                }
            }
        }
        return dMin;
    }

    @Override
    public String toString() {
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < Ens.size() - 1; i++) {
            buf.append(Ens.get(i).toString() + " - ");
        }
        buf.append(Ens.get(Ens.size() - 1).toString());
        return buf.toString();
    }

    double distance(String S, JWNLDistances d) {
        double dSim = 0.0;
        for (int i = 0; i < Ens.size(); i++) {
            dSim += Ens.get(i).distance(new Element(S), d);
        }
        return dSim / Ens.size();
    }

    boolean contains(String V) {
        for (int i = 0; i < Ens.size(); i++) {
            if (Ens.get(i).equals(V.toLowerCase())) {
                return true;
            }
        }
        return false;
    }
}
